/*
 * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.reflect;


/**
 * ParameterizedType 表示参数化类型，例如 Collection&lt;String&gt;。
 *
 * <p>参数化类型在反射方法首次需要时创建，如本包中所指定的。
 * 当创建参数化类型 p 时，p 实例化的泛型类型声明被解析，
 * 并且 p 的所有类型参数都被递归创建。
 * 有关类型变量创建过程的详细信息，请参见 {@link java.lang.reflect.TypeVariable TypeVariable}。
 * 重复创建参数化类型不会产生任何效果。
 *
 * <p>实现此接口的类的实例必须实现 equals() 方法，
 * 该方法将共享相同泛型类型声明且具有相等类型参数的任何两个实例视为相等。
 *
 * @since 1.5
 */
public interface ParameterizedType extends Type {
    /**
     * 返回表示此类型的实际类型参数的 {@code Type} 对象数组。
     *
     * <p>请注意，在某些情况下，返回的数组可能为空。
     * 如果此类型表示嵌套在参数化类型中的非参数化类型，就会出现这种情况。
     *
     * @return 表示此类型的实际类型参数的 {@code Type} 对象数组
     * @throws TypeNotPresentException 如果任何实际类型参数引用不存在的类型声明
     * @throws MalformedParameterizedTypeException 如果任何实际类型参数引用
     *     由于任何原因无法实例化的参数化类型
     * @since 1.5
     */
    Type[] getActualTypeArguments();

    /**
     * 返回表示声明此类型的类或接口的 {@code Type} 对象。
     *
     * @return 表示声明此类型的类或接口的 {@code Type} 对象
     * @since 1.5
     */
    Type getRawType();

    /**
     * 返回表示此类型所属类型的 {@code Type} 对象。
     * 例如，如果此类型是 {@code O<T>.I<S>}，则返回 {@code O<T>} 的表示。
     *
     * <p>如果此类型是顶级类型，则返回 {@code null}。
     *
     * @return 表示此类型所属类型的 {@code Type} 对象。
     *     如果此类型是顶级类型，则返回 {@code null}
     * @throws TypeNotPresentException 如果所有者类型引用不存在的类型声明
     * @throws MalformedParameterizedTypeException 如果所有者类型引用
     *     由于任何原因无法实例化的参数化类型
     * @since 1.5
     */
    Type getOwnerType();
}
